#include "vector.h"

namespace gojo
{

    void test01 ()
    {

        vector<int> v1 ; // 正常初始化

        v1.push_back (1) ;

        v1.push_back (2) ;

        v1.push_back (3) ;

        v1.push_back (4) ;

        v1.push_back (5) ;

        vector<int> v2 (v1) ; // 拷贝构造 

        vector<int> v3 (v1.begin () , v1.end ()) ; // 使用迭代器构造

        vector<int> v4 (10 , 1) ; // 使用初始化构造

        vector<int> v5 ({1 , 2 , 3 , 4 , 5}) ; // 使用initializer_list构造

    }

    void test02 ()
    {

        vector<int> v1 ;

        v1.push_back (1) ;

        v1.push_back (2) ;

        v1.push_back (3) ;

        v1.push_back (4) ;

        v1.push_back (5) ;

        v1.resize (10 , 1) ;

        int* pos = v1.insert (v1.begin () + 2 , 114514) ;

        cout << (*pos) << endl ;

        Print (v1) ;

    }

    void test03 ()
    {

        vector<int> v1 ({1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10}) ;

        v1.pop_back () ;

        Print (v1) ;

        v1.erase (v1.begin () + 3) ;

        Print (v1) ;

        v1.clear () ;

        v1.push_back (114514) ;

        Print (v1) ;

    }

    void test04 ()
    {

        vector<int> v1 ({1 , 2 , 3 , 4}) ;

        vector<int> v2 = v1 ; // 测试函数的赋值重载

        Print (v2) ;

        v2 [3]++ ; // 测试函数的下标访问和修改

        Print (v2) ;

    }

    void test05 ()
    {

        vector<int> v1 ({1 , 2 , 3 , 4 , 5}) ;

        const vector<int> v2 ({1 , 2 , 3 , 4 , 5}) ;

        auto it = v2.rbegin () ;

        while (it != v2.rend ())
        {

            cout << (*it) << " " ;

            it += 1 ;

        }

        cout << endl ;

        auto i2 = v1.rbegin () ;

        for (int i = 0 ; i < 5 ; i++)
        {

            cout << i2 [i] << " " ;
        
        }

        i2++ ;

    }

}

    int main ()
    {

        // gojo::test01 () ; // 测试函数默认构造和析构

        // gojo::test02 () ; // 测试函数的增加功能

        // gojo::test03 () ; // 测试函数的删除功能

        // gojo::test04 () ; // 测试函数的修改功能

        gojo::test05 () ; // 测试函数的反向迭代器功能

        return 0 ;

    }